package br.com.linkin.mi.utils.log;

import br.com.linkin.mi.utils.data.DateUtil;
import java.text.MessageFormat;
import java.util.Date;
import java.util.logging.Level;

/**
 *
 * @author daniel.mendonca
 */
public abstract class Logger {
    
    public final static java.util.logging.Logger LOGGER = java.util.logging.Logger.getLogger(Logger.class .getName());    
    
    public static final Level INFO = Level.INFO;
    public static final Level CONFIG = Level.CONFIG;
    public static final Level WARNING = Level.WARNING;
    public static final Level SEVERE = Level.SEVERE;
    public static final Level ALL = Level.ALL;
    public static final Level OFF = Level.OFF;
    
    /**
     * mensagen informacao
     * @param mensagen 
     */
    public static void informacao(String mensagen){
        LOGGER.log(INFO, formatLog(mensagen));
    }
    
    /**
     * lista mensagen informacao
     * @param mensagen
     * @param paramentros 
     */
    public static void informacao(String mensagen, Object... paramentros){
        LOGGER.log(INFO, formatLog(MessageFormat.format(mensagen, paramentros)));
    }
    
    /**
     * mensagen configuracao
     * @param mensagen 
     */
    public static void configuracao(String mensagen){
        LOGGER.log(CONFIG, formatLog(mensagen));
    }
    
    /**
     * alerta
     * @param mensagen 
     */
    public static void alerta(String mensagen){
        LOGGER.log(WARNING, formatLog(mensagen));
    }
    
    /**
     * erro
     * @param mensagen 
     */
    public static void erro(String mensagen){
        LOGGER.log(SEVERE, formatLog(mensagen));
    }
    
    /**
     * erro
     * @param mensagen
     * @param paramentros 
     */
    public static void erro(String mensagen, Object... paramentros){
        LOGGER.log(SEVERE, formatLog(MessageFormat.format(mensagen, paramentros)));
    }
    
    /**
     * informacao
     * @param mensagen
     * @param e 
     */
    public static void informacao(String mensagen, Exception e){
        LOGGER.log(INFO, formatLog(mensagen), e);
    }
    
    /**
     * configuracao
     * @param mensagen
     * @param e 
     */
    public static void configuracao(String mensagen, Exception e){
        LOGGER.log(CONFIG, formatLog(mensagen), e);
    }
    
    /**
     * alerta
     * @param mensagen
     * @param e 
     */
    public static void alerta(String mensagen, Exception e){
        LOGGER.log(WARNING, formatLog(mensagen), e);
    }
    
    /**
     * erro
     * @param mensagen
     * @param e 
     */
    public static void erro(String mensagen, Exception e){
        LOGGER.log(SEVERE, formatLog(mensagen), e);
    }
    
    /**
     * erro
     * @param mensagen
     * @param e
     * @param paramentros 
     */
    public static void erro(String mensagen, Exception e, Object... paramentros){
        LOGGER.log(SEVERE, formatLog(MessageFormat.format(mensagen, paramentros)), e);
        
    }
    
    /**
     * format Log
     * @param mensagen
     * @return data + mensagen
     */
    private static String formatLog(String mensagen){
        StringBuilder msg = new StringBuilder();        
        msg.append(DateUtil.dateTimeFormat(new Date()))
           .append(" - ")
           .append(mensagen);
        return msg.toString();
    }
    
}
